/*
 * Test.java
 *
 */

package ar.com.educacionit.hibernate.testers;

import ar.com.educacionit.hibernate.entities.Auto;
import ar.com.educacionit.hibernate.manager.EducacionITSessionManager;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author Sebastian S. Sanga <SebastianSanga@gmail.com>
 */
public class TestQueriesParametrizadas {
    
    /**
     * Creates a new instance of TestAutosOld
     */
    public TestQueriesParametrizadas() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {

        // Obtiene la sesion de trabajo
        Session session = EducacionITSessionManager.getSession();
        
        // Establece el modelo y la marca a buscar
        String modelo = "";
        String marca  = "";
        
        // Establece el modelo, la marca, y obtiene los autos correspondiente
        List<Auto> autos = obtenerAutosSegunCriterio(session, modelo, marca);
        
        // Muestra los autos
        mostrarAutos(autos.iterator(), 0);

        // Cierra la sesion de trabajo
        session.close();
    }
    
    public static void mostrarAutos( Iterator<Auto> it, int desde)
    {
        // Muestra los datos
        while( it.hasNext() )
        {
            Auto a = it.next();
            System.out.println( "[Registro #" + desde + "] >>> " + a.toString() );
            desde++;
        }
    }
    
    private static List<Auto> obtenerAutosSegunCriterio(Session s, String unModelo, String unaMarca)
    {
        // Valida los parametros unModelo y unaMarca
        if(unModelo == null) unModelo = "";
        if(unaMarca == null) unaMarca = "";

        // Construye la consulta parametrizada
        Query qry = s.createQuery("FROM ar.com.educacionit.hibernate.entities.Auto WHERE modelo LIKE :p1 AND marca LIKE :p2 ");
        qry.setString("p1", "%" + unModelo);
        qry.setString("p2", unaMarca + "%");
        
        // Retorna el resultado
        return (List<Auto>) qry.list();
    }    
    

}
